import { IPSModelObject } from '../ipsmodel-object';
import { IPSWFLink } from './ipswflink';
import { IPSWFProcess } from './ipswfprocess';
import { IPSWorkflow } from './ipsworkflow';
import { IPSWorkflowObject } from './ipsworkflow-object';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSWFVersion
 */
export interface IPSWFVersion extends IPSWorkflowObject, IPSModelObject {
  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  /**
   * 流程连接集合
   *
   * @type {IPSWFLink[]}
   */
  getPSWFLinks(): IPSWFLink[] | null;

  /**
   * 流程连接集合
   *
   * @type {IPSWFLink[]}
   */
  get psWFLinks(): IPSWFLink[] | null;

  findPSWFLink(objKey: any): IPSWFLink | null;

  /**
   * 流程处理集合
   *
   * @type {IPSWFProcess[]}
   */
  getPSWFProcesses(): IPSWFProcess[] | null;

  /**
   * 流程处理集合
   *
   * @type {IPSWFProcess[]}
   */
  get psWFProcesses(): IPSWFProcess[] | null;

  findPSWFProcess(objKey: any): IPSWFProcess | null;

  /**
   * 工作流
   *
   * @type {IPSWorkflow}
   */
  getPSWorkflow(): IPSWorkflow | null;

  /**
   * 工作流
   *
   * @type {IPSWorkflow}
   */
  get psWorkflow(): IPSWorkflow | null;

  /**
   * 工作流（必须存在）
   *
   * @type {IPSWorkflow}
   */
  getPSWorkflowMust(): IPSWorkflow;

  /**
   * 开始处理
   *
   * @type {IPSWFProcess}
   */
  getStartPSWFProcess(): IPSWFProcess | null;

  /**
   * 开始处理
   *
   * @type {IPSWFProcess}
   */
  get startPSWFProcess(): IPSWFProcess | null;

  /**
   * 开始处理（必须存在）
   *
   * @type {IPSWFProcess}
   */
  getStartPSWFProcessMust(): IPSWFProcess;

  /**
   * 工作流代码标识
   * @type {string}
   */
  wFCodeName: string;

  /**
   * 版本
   * @type {number}
   */
  wFVersion: number;

  /**
   * 有移动端流程启动视图
   * @type {boolean}
   */
  get hasMobStartView(): boolean | null;

  /**
   * 有移动端流程启动视图
   * @type {boolean}
   */
  getHasMobStartView(): boolean | null;

  /**
   * 有流程启动视图
   * @type {boolean}
   */
  get hasStartView(): boolean | null;

  /**
   * 有流程启动视图
   * @type {boolean}
   */
  getHasStartView(): boolean | null;

  /**
   * 是否启用
   * @type {boolean}
   */
  valid: boolean;
}
